// 7.8 null/undefined区别：ts中可以复制给任何类型（任何类型的子类型） 严格模式中不能将null和undefined赋值给其他类型
//严格模式中 null ->null undefined -> undefined
let un:undefined = undefined;

//9.void空类型一般用于函数的返回值类型
//strictNullchecks 如果开启null的严格检测 则null不能复制给其他人
//void能接受的返回值有 undefined和null 在严格模式下不能使用null
function a():void {
    return null //r
}


//10 never 标识永远不 1）程序无法到终点（死循环 抛错） 2）判断的时候会出现nerver 3)用nerver来做一些特殊的处理(完整性保护)

function throwError():never {
    throw new Error("");
}

function whileTrue():never {
    while (true) {
        
    }
}


//在判断永远无法走到的时候 结果是never类型
function getVal(str:string) {
    if(typeof str == 'string'){
        str
    }else{
        str
    }
}

//Symbol 是独一无二的
let s1 = Symbol()
let s2 = Symbol();
console.log(s1==s2);

let big1 = Number.MAX_SAFE_INTEGER+1; //最大安全数
let big2 = Number.MAX_SAFE_INTEGER+2;
console.log(big1==big2);

//这里有14种：string number boolean 元素 数组 枚举 void null undefined symbol bigInt never any（放弃ts检查）
function create(o:object) {//标识除了基本类型 其他意外的类型乐意适合用object
    o
}

create({})
create([])
create(function(){})

export {}